/* jshint esversion: 6 */
// 引入mockjs
const Mock = require('mockjs');
// 获取 mock.Random 对象
const Random = Mock.Random;

var http = require('http');
var querystring = require('querystring');
var url = require('url');
// mock一组数据
var storeData = [{
        storeId: "001",
        storeName: "全是好东西旗舰店",
        goodsList: []
    },
    {
        storeId: "002",
        storeName: "没有不好的旗舰店",
        goodsList: []
    }
];

var goodsData = [
    {
        goodsId: "001001c001s001",
        gid: "001001",
        goodsName: "XX品牌XX东西XX类型XX风格XXXX",
        price: "299",
        num: 1,
        color: {
            cid: "c001",
            cvalue: "深蓝",
            image: ""
        },
        size: {
            sid: "s001",
            svalue: "30"
        },
        stock: "299"
    },
    {
        goodsId: "001001c001s002",
        gid: "001001",
        goodsName: "XX品牌XX东西XX类型XX风格XXXX",
        price: "299",
        num: 1,
        color: {
            cid: "c001",
            cvalue: "深蓝",
            image: ""
        },
        size: {
            sid: "s002",
            svalue: "31"
        },
        stock: "200"
    },
    {
        goodsId: "001001c001s003",
        gid: "001001",
        goodsName: "XX品牌XX东西XX类型XX风格XXXX",
        price: "299",
        num: 1,
        color: {
            cid: "c001",
            cvalue: "深蓝",
            image: ""
        },
        size: {
            sid: "s003",
            svalue: "32"
        },
        stock: "150"
    },
    {
        goodsId: "001001c002s001",
        gid: "001001",
        goodsName: "XX品牌XX东西XX类型XX风格XXXX",
        price: "299",
        num: 1,
        color: {
            cid: "c002",
            cvalue: "浅蓝",
            image: ""
        },
        size: {
            sid: "s001",
            svalue: "30"
        },
        stock: "130"
    },
    {
        goodsId: "001001c002s002",
        gid: "001001",
        goodsName: "XX品牌XX东西XX类型XX风格XXXX",
        price: "299",
        num: 1,
        color: {
            cid: "c002",
            cvalue: "浅蓝",
            image: ""
        },
        size: {
            sid: "s002",
            svalue: "31"
        },
        stock: "50"
    },
    {
        goodsId: "001001c002s003",
        gid: "001001",
        goodsName: "XX品牌XX东西XX类型XX风格XXXX",
        price: "299",
        num: 1,
        color: {
            cid: "c002",
            cvalue: "浅蓝",
            image: ""
        },
        size: {
            sid: "s003",
            svalue: "32"
        },
        stock: "30"
    },
    {
        goodsId: "001002c001s001",
        gid: "001002",
        goodsName: "XX品牌YY东西YY类型YY风格YYYY",
        price: "399",
        num: 1,
        color: {
            cid: "c001",
            cvalue: "黑色",
            image: ""
        },
        size: {
            sid: "s001",
            svalue: "S"
        },
        stock: "1000"
    },
    {
        goodsId: "001002c001s002",
        gid: "001002",
        goodsName: "XX品牌YY东西YY类型YY风格YYYY",
        price: "399",
        num: 1,
        color: {
            cid: "c001",
            cvalue: "黑色",
            image: ""
        },
        size: {
            sid: "s002",
            svalue: "M"
        },
        stock: "400"
    },
    {
        goodsId: "001002c001s003",
        gid: "001002",
        goodsName: "XX品牌YY东西YY类型YY风格YYYY",
        price: "399",
        num: 1,
        color: {
            cid: "c001",
            cvalue: "黑色",
            image: ""
        },
        size: {
            sid: "s003",
            svalue: "L"
        },
        stock: "600"
    },
    {
        goodsId: "001002c002s001",
        gid: "001002",
        goodsName: "XX品牌YY东西YY类型YY风格YYYY",
        price: "399",
        num: 1,
        color: {
            cid: "c002",
            cvalue: "灰色",
            image: ""
        },
        size: {
            sid: "s001",
            svalue: "S"
        },
        stock: "200"
    },
    {
        goodsId: "001002c002s002",
        gid: "001002",
        goodsName: "XX品牌YY东西YY类型YY风格YYYY",
        price: "399",
        num: 1,
        color: {
            cid: "c002",
            cvalue: "灰色",
            image: ""
        },
        size: {
            sid: "s002",
            svalue: "M"
        },
        stock: "140"
    },
    {
        goodsId: "001002c002s003",
        gid: "001002",
        goodsName: "XX品牌YY东西YY类型YY风格YYYY",
        price: "399",
        num: 1,
        color: {
            cid: "c002",
            cvalue: "灰色",
            image: ""
        },
        size: {
            sid: "s003",
            svalue: "L"
        },
        stock: "320"
    },
    {
        goodsId: "002001c001",
        gid: "002001",
        goodsName: "ZZ品牌XX东西XX类型XX风格wwww",
        price: "499",
        num: 1,
        color: {
            cid: "c001",
            cvalue: "红色",
            image: ""
        },
        //   size: {
        //     sid: "s001",
        //     svalue: "均码"
        //   },
        stock: "888"
    }
];

var selectData = [
    {
        gid: "001001",
        goodsName: "XX品牌XX东西XX类型XX风格XXXX",
        price: "299",
        color: [{
                cid: "c001",
                cvalue: "深蓝"
            },
            {
                cid: "c002",
                cvalue: "浅蓝"
            }
        ],
        size: [
            {
                sid: "s001",
                svalue: "30"
            },
            {
                sid: "s002",
                svalue: "31"
            },
            {
                sid: "s003",
                svalue: "32"
            }
        ],
        num: "1",
        description: "好东西，这东西真真是极好的，不买不知道，买了不吃亏，买了还想买，你要不要买，反正好多人买",
        origin_price: "599",
        stock: "199"
    },
    {
        gid: "001002",
        goodsName: "XX品牌YY东西YY类型YY风格YYY",
        price: "399",
        color: [{
                cid: "c001",
                cvalue: "黑色"
            },
            {
                cid: "c002",
                cvalue: "灰色"
            }
        ],
        size: [

            {
                sid: "s001",
                svalue: "S"
            },
            {
                sid: "s002",
                svalue: "M"
            },
            {
                sid: "s003",
                svalue: "L"
            }

        ],
        num: "1",
        description: "好东西，这东西真真是极好的，不买不知道，买了不吃亏，买了还想买，你要不要买，反正好多人买",
        origin_price: "699",
        stock: "999"
    },
    {
        gid: "002001",
        goodsName: "ZZ品牌XX东西XX类型XX风格wwww",
        price: "499",
        color: [{
            cid: "c001",
            cvalue: "红色"
        }],
        num: "1",
        description: "好东西，这东西真真是极好的，不买不知道，买了不吃亏，买了还想买，你要不要买，反正好多人买",
        origin_price: "599",
        stock: "999"
    }
];



// Mock.mock( url, post/get , 返回的数据)；
// 通过 req.url 拿到具体 get 的url，req.body 拿到请求post参数
// nodejs的 querystring 模块的 parse 方法解析 post 体的数据
Mock.mock('/cartData', 'post', (req) => {
    var idArr = querystring.parse(req.body).id.split(',');
    var targetList = [];
    // ["001001c002s002", "001002c002s002"]
    // console.log(idArr);
    var stores =[];
    var goods = [];

    // 自内向外--分开循环
    idArr.forEach(element => {
        // 找到对应的商品信息
        goodsData.some(item=>{
            if(item.goodsId == element){
               goods.push(item);
               return true;
            }
        });
        // 找到对应的店铺的信息
        var storeId = element.slice(0,3);
        storeData.some(ele =>{
            if(ele.storeId == storeId) {
                // 判断是否已经存在该店铺，一个店铺可以有多个商品，但不能添加重复的店铺
                // 加流程控制，如果存在则不进行全新的push
                var flag = false;
                stores.forEach(value => {
                    if(value.storeId == storeId) {
                        flag = true;
                        return true;
                    }
                });
                if(!flag){
                    stores.push(ele);
                    return true;
                }
            }
        });
    });
    
    stores.forEach(item => {
        goods.forEach(ele => {
            if(ele.goodsId.slice(0,3) == item.storeId){
                var list = item.goodsList;
                var isExist = false;
                // 判断是否已经存在，避免重复添加，解决每一次进入购物车时，数据重复添加的bug
                list.some(value => {
                    if(value.goodsId == ele.goodsId){
                        isExist = true;
                        return true;
                    }
                });
                if(!isExist){
                    item.goodsList.push(ele);
                }
                
            }
        });
    });
    // if(goods.length)
    targetList = stores;
    // console.log("targetList");
    // console.log(targetList);
    // console.log("stores");
    // console.log(stores);
    // console.log("goods");
    // console.log(goods);
    
    return targetList;

    // 自外向内
    // idArr.forEach(ele => {
    //     var storeId = ele.slice(0, 3);
    //     var flag = false;
    //     // 有同一个店铺的商品
    //     targetList.some((value, index) => {
    //         if (value.storeId == storeId) {
    //             // 找到对应的商品信息，添加到对应的店铺列表
    //             goodsData.some(item => {
    //                 if (item.goodsId == ele) {
    //                     targetList[index].goodsList.push(item);
    //                     flag = true;
    //                     return true;
    //                 }
    //             });
    //         }
    //     });
    //     // 没有同一个店铺的商品
    //     if (!flag) {
    //         storeData.some(element => {
    //             // 到数据中找出该店铺的信息，加入购物车渲染列表中
    //             if (storeId == element.storeId) {
    //                 targetList.push(element);
    //                 // 到数据中找到目标商品信息，并加入到店铺的商品列表中
    //                 goodsData.some(item => {
    //                     if (item.goodsId == ele) {
    //                         element.goodsList.push(item);
    //                         return true;
    //                     }
    //                 });
    //             }
    //         });
    //     }

    // });
    
});

// 用正则匹配 get 的url,否则报错404
// req.url 拿到具体 get 的url
// nodejs的 url 模块的 parse 方法解析 get 传递的参数
Mock.mock(RegExp('/select' + ".*"), 'get', (req) => {
    var select = [];
    var params = url.parse(req.url, true).query;
    // console.log(url.parse(req.url, true));
    selectData.some((ele) => {
        if (ele.gid == params.id) {
            select.push(ele);
            return true;
        }
    });
    return select;
});